package baduga.client.Fasada;


import baduga.client.Controler;
import baduga.client.Player_Constans;
import baduga.core.Core_Gui_ErrorWindow;
import baduga.core.Core_JsonDataSchema;
import baduga.core.Core_Messages;
import baduga.karo.TableGame;

public class FC_TableEnvSwitch {
	
	
	/**
	 * Obsługuje żądanie utworzenia własnego stołu
	 * 
	 * @param data
	 */
	public void initOwnTable(Core_JsonDataSchema data)
	{
		//Def.
		Object[] resData;
		
		//Init.
		resData = data.getDataD1();
		
		//Sprawdzamy stan odpowiedzi
		if((boolean) resData[0])
		{
			//Wczytuje nowe dane
			Controler.guiCrNewTab.dispose();
			
			//Domyślne ustawienie pozycji gracza w stole
			 Player_Constans.setNrOfPosition( 0 );
			
			Controler.guiTabGame = new TableGame( Controler.guiCrNewTab.getControler(), true );
			Controler.guiTabGame.setVisible(true);
			Controler.guiTabGame.setLocationRelativeTo(null);
		}
		else
		{
			if(resData.length == 2)
			{
				//Komunikat błędu
				Core_Gui_ErrorWindow.errorWindow(Core_Messages.getMessage(  Core_JsonDataSchema.toInt(resData[1])  ) , Core_Messages.getMessage(0x0100));
			}
			else
			{
				

				
				//Init.
				resData = data.getDataD2()[0];
				
				
				Core_Gui_ErrorWindow.errorWindow( Core_Messages.getMessage(  Core_JsonDataSchema.toInt(resData[0])  ) , Core_Messages.getMessage(0x0100));
				
				
			}
		}
	}

	
	/**
	 * Obsłguje żądanie dołączenia do stołu
	 * 
	 * @param data
	 */
	public void jointToTable(Core_JsonDataSchema data)
	{
		//Def.
		Object[] resData;
		
		//Init.
		resData = data.getDataD1();
		
		//Sprawdzamy stan odpowiedzi
		if((boolean) resData[0])
		{
			//Def.
			Object[][] resDataD2;
			
			//init
			resDataD2 = data.getDataD2();
			
			
			//Wczytuje nowe dane
			Controler.guiTabListScr.dispose();
			
			Controler.guiTabGame = new TableGame( Controler.guiTabListScr.getControler(), false );
			
			
			//Wczytanie danych stołu
			Controler.guiTabGame.setTableData( resDataD2[0], 2);
			
			//Wczytanie danych
			Controler.guiTabGame.setPlayerData(resDataD2[1], 0);
			
			
			//Ustawienie danych
			Controler.guiTabGame.setVisible(true);
			Controler.guiTabGame.setLocationRelativeTo(null);
		}
		else
		{
			//Komunikat błędu
			Core_Gui_ErrorWindow.errorWindow(Core_Messages.getMessage(  Core_JsonDataSchema.toInt(resData[1])  ) , Core_Messages.getMessage(0x0100));
		}
	}

	
	
	
	/**
	 * Gracz opuszcza stół, (Pokazuje komunikat jak poszło coś nie tak)
	 * 
	 * @param data
	 */
	public void leftTable(Core_JsonDataSchema data)
	{
		//Def.
		Object[] resData;
		
		//Init.
		resData = data.getDataD1();
		
		//Sprawdzamy stan odpowiedzi
		if(!(boolean) resData[0])
		{
			//Komunikat błędu
			Core_Gui_ErrorWindow.errorWindow(Core_Messages.getMessage(  Core_JsonDataSchema.toInt(resData[1])  ) , Core_Messages.getMessage(0x0100));
		}
	}
	
	
	
	/**
	 * Zajmuje się obsługa zmiany stanu
	 * 
	 * @param data
	 */
	public void intMigrationTable(Core_JsonDataSchema data)
	{
		//Def.
		Object[] resData;
		
		//Init.
		resData = data.getDataD1();
		
		//Sprawdzamy stan odpowiedzi
		if((boolean) resData[0])
		{
			//Def.
			Object[][] resDataD2;
			
			//init
			resDataD2 = data.getDataD2();

			
			
			//Wczytanie danych stołu
			Controler.guiTabGame.setTableData( resDataD2[0], 2);
			
			//Wczytanie danych
			Controler.guiTabGame.setPlayerData(resDataD2[1], 0);
			

			//Dostosowanie stołu
			Controler.guiTabGame.setPlayerType(data.getArgs()[1]);
			
			if((Integer) data.getArgs()[1] == 1) //Dołącza się jako gracz
			{
				Controler.guiTabGame.setGamerData(null);
			}
			else //Odchodzi od stołu
			{
				Controler.guiTabGame.clearPlayerData(5, 1);
			}
			

		}
		else
		{
			//Komunikat błędu
			Core_Gui_ErrorWindow.errorWindow(Core_Messages.getMessage(  Core_JsonDataSchema.toInt(resData[1])  ) , Core_Messages.getMessage(0x0100));
		}
	}
	
	
	
	/**
	 * Przetwarza dane z broadCastu
	 * 
	 * @param data
	 */
	public void catchBroadcast(Core_JsonDataSchema data)
	{
		//Przesłanie do okna gry
		Controler.guiTabGame.apendNewMessage(new int[] {0 , 0},  Core_Messages.parseMessage( data.getDataD1()) );
	}
	
	
	/**
	 * Obsługuje zdarzenia gdy obserwator staje się graczem lub rezygnuej z tego. (Przed rozpoczęciem gry)
	 * 
	 * @param data
	 */
	public void playerContentUpdate(Core_JsonDataSchema data)
	{
		//Def.
		Object[][] resDataD2;
		
		//init
		resDataD2 = data.getDataD2();
		
		
		if(resDataD2.length == 2) //Dołączenie
		{
			//Wczytanie danych
			Controler.guiTabGame.setPlayerData(resDataD2[1], 1);
		}
		else //Odłączenie
		{
			Controler.guiTabGame.clearPlayerData(Core_JsonDataSchema.toInt( resDataD2[0][0] ), 0);
		}
	}
	
	
	
	
	/**
	 * Przetwarza odpowiedź serwera po żądaniu ustawienia statusu aktywnego
	 * 
	 * @param data
	 */
	public void readySubmitStat(Core_JsonDataSchema data)
	{
		//Def.
		Object[] resData;
		
		//Init.
		resData = data.getDataD1();
		
		//Sprawdzamy stan odpowiedzi
		if((boolean) resData[0])
		{
			//Blokuje przycisk start i przeładowuje środowisko
			Controler.guiTabGame.setPlayerMoveEndStatus(1);
			Controler.guiTabGame.prepareEnviroment();
		}
		else
		{
			//Komunikat błędu
			Core_Gui_ErrorWindow.errorWindow(Core_Messages.getMessage(  Core_JsonDataSchema.toInt(resData[1])  ) , Core_Messages.getMessage(0x0100));
		}
	}
	
}
